﻿using System;
using System.Runtime.Serialization;

namespace Microsoft.Practices.Repository.Oracle
{
    /// <summary>
    /// Use this exception for ORA-12154: TNS:could not resolve the connect identifier specified.
    /// </summary>
    [Serializable()]
    public class OracleConnectIdentifierNotResolvableException : RepositoryException
    {
        /// <summary>
        /// The <see cref="OracleConnectIdentifierNotResolvableException"/> message string.
        /// </summary>
        public static readonly string ConnectIdentifierNotResolvableMessage =
             @"The database specified in the application's configuration file connection string could" +
             " not be resolved by Oracle TNS.  \r(1) Check the application's configuration file to make sure" +
             " the connection string is appropriate and check the tnsnames.ora file to make sure a" +
             " corresponding entry exists.  \r(2) Perform a TNSPING from the operating system command line to " +
             " ensure the database is available.";

        /// <summary>
        /// Initializes a new instance of the <see cref="OracleConnectIdentifierNotResolvableException"/> class.
        /// </summary>
        public OracleConnectIdentifierNotResolvableException()
            : base(OracleConnectIdentifierNotResolvableException.ConnectIdentifierNotResolvableMessage)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="OracleConnectIdentifierNotResolvableException"/> class 
        /// with a specified error message.
        /// </summary>
        /// <param name="message">The message that describes the error.</param>
        public OracleConnectIdentifierNotResolvableException(string message)
            : base(message)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="OracleConnectIdentifierNotResolvableException"/> class
        /// with a specified error message and a reference to the inner exception that is the cause of this exception.
        /// </summary>
        /// <param name="message">The message that describes the error.</param>
        /// <param name="innerException">The exception that is the cause of the current exception, or a null reference 
        /// (Nothing in Visual Basic) if no inner exception is specified.</param>
        public OracleConnectIdentifierNotResolvableException(string message, Exception innerException)
            : base(message, innerException)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="OracleConnectIdentifierNotResolvableException"/> class
        /// with serialiazation information and a streaming context.
        /// </summary>
        /// <param name="info">The <see cref="SerializationInfo"/> that holds the serialized object data about 
        /// the exception being thrown.</param>
        /// <param name="context">The <see cref="StreamingContext"/> that contains contextual information about 
        /// the source or destination.</param>
        protected OracleConnectIdentifierNotResolvableException(SerializationInfo info, StreamingContext context)
            : base(info, context)
        {
        }
    }
}
